[レポート]Piloting Edge Copilot – CODE BLUE 2024 #codeblue_jp
危機管理室の吉本です。
CODE BLUE 2024の以下のセッションについてレポートをまとめます。
Piloting Edge Copilot
WebブラウザのAI機能はユーザーにとって便利だが、攻撃者にとってはどうだろうか? この講演では、Microsoft Edgeブラウザに搭載されたAI機能であるEdge Copilotによって発生した複数の脆弱性を紹介する。例えば、あらゆるサイトの情報を盗む方法や、ユーザーの許可なしにマイクやカメラへのアクセスを行う方法などである。 さらにこの講演では、比較的安全なシステム(Edge)と安全なシステムではない(Bing)の統合により、安全なシステムに実装された緩和策が安全ではないシステムを介してどのようにバイパスされるかを説明する。さらに、従来のセキュリティ緩和策では防げない、LLM(大規模言語モデル)固有のリーク手法も解説する。
Presented by : Jun_Kokatsu 小勝 純
レポート
- 自己紹介
- Microsoft Edge security teamのフォーマーメンバー
- 現在はGoogleのWeb security teamに所属
- 10年間バグハンターをしている
- Edge Copilotとは
- Edgeサイドバーに組み込まれたCopilot
- アクティブタブのコンテンツにアクセスできる
- その他にも多くの特権APIが公開され、Edgeと緊密に統合されている
- アーキテクチャー
- WebUI(edge://discover-chat)がpostMessagesでedgeservice.bing.comのiframeとやり取りしている
- edge://discover-chatとは
- 権限の強い内部ページ
- カメラやマイクのデフォルト権限
- 様々な拡張API
- Mojoインターフェース
- 権限の強い内部ページ
- edge://discover-chatのセキュリティ
- 強力なCSPとTrusted Typesを備えたSPAで、XSS攻撃を効果的に排除
- edgeservices.bing.comのセキュリティ
- Strict CSP
- ポリシー強制したTrusted Types
- 最低限のCSPの設定
- ブラウザでのOrigin Isolation
- CSP Embedded Enforcementとは?
- CSPを強制することによりiframeに最低限のCSPを適用する - ここまでのまとめ
- XSSはdiscover-chatとedgeservide.bing.comの両方で厳格なCSPとTrusted Typesにより不可能に見える
- edgeは相当に安全なので、bingの脆弱性を探すことにした
www.bing.com
の調査- javascriptを送るとXSSができた
- Bingに公開しているプライベートAPIがある
- chrome.edgeSplitTabsPriveteはEdgeでタブを分割できる
- OpenUriが使える
- スプリットタブで開いたタブを閉じるとバイパス可能
- APIで任意のプロンプトをCopilotに送信可能
- 組み合わせると、任意のサイトのコンテンツの取得が可能
- 履歴をXSSで読みに行くことができないか
- Edgeからはbingプライバシー機能でブロックされていた
- どのように実装されているか
- AIで検知していた
- ページのことを聞いている場合、Copilotでどう認識するかというと、現在のページがメッセージの中に埋め込まれる
- どうプライバシー機能をバイパスするか
- 関係ないことを聞くと、ページの内容がメッセージに含まれる
- XSSでバイパスしてhiと聞くと、メールの内容が見えてしまう
- edgeを使っていると、ページのタイトルがCopilotに挿入されていた
- 新しい機能で、ページのタイトルを取り込む
- bingはなぜかサニタイズをせずにHTMLで代入してしまう
- HTMLインジェクションは可能
- スクリプトは実行できない
- allow属性で、bingのiframeに付与されている
- トップフレーム(カメラ、マイク)の権限を付与できる
- iframeにallow属性を入れたものでカメラ操作できるのでは
- CSPでブロックされる
- フレームソースで許可されたものしか実行できない
- どうすればできるか考えた
- 許可されているエンドポイントとリンクをインジェクション
- ターゲットを設定すると、オープナー経由でURLが取れる
- bingで発火したXSS経由でiframeのスクリプト(カメラ操作)が実行できた
- デモ:攻撃者のリンクにアクセスするとカメラの映像が取れる
- 昔はどこからでも埋め込めた
- URLのハッシュが変更されたときのイベントリスナー
- discover.chat.say.userでメッセージが送れる
- 任意のサイトが読めるわけではない
- サーチメモリーという以前の会話を参照する機能がある
- ユーザーの代わりに任意のプロンプトが遅れ、会話の履歴が読める
- どうやって盗むか
- マークダウンのリンクではできなかった
- リンクの構文を調べた
- 過去の会話をリークさせるプロンプトを作った
- 改行をたくさん入れて、攻撃者のプロンプトがユーザーに見えないようにしている
- ユーザーは履歴にアクセスすると、過去の会話が攻撃者に漏れる
- 結論
- edgeは安全
- bingは脆弱性あり
- 何か二つのシステムを統合する場合、両方安全でないといけない
- 基本的なセキュリティ対策が重要(XSSできてしまうとCopilotは関係ない)
- AIを使ったリークの緩和策を考える必要がある
感想
- 1つでも脆弱な部分があると、安全性は一番脆弱な部分に引っ張られてしまうことが改めてわかりました
- バグバウンティでは報酬があるのも魅力的ですね